/**
 * @author 徐楠
 * @date 2022/2/28 20:17
 * @version 1.0
 */

package com.xunan.likou;

import java.util.HashMap;

public class TimoAttack {
    public static void main(String[] args) {
        int[] timeSeries = {1, 2};
        int duration = 2;
        int result = findPoisonedDuration(timeSeries, duration);
        System.out.println(result);
    }

    public static int findPoisonedDuration(int[] timeSeries, int duration) {

        int length = timeSeries.length;
        if (length == 0) {
            return 0;
        }
        HashMap<Integer, Integer> map = new HashMap<>();
        for (int i = 0; i < length; i++) {
            for (int j = 0; j < duration; j++) {
                map.put(timeSeries[i]++, 1);
            }
        }
        return map.size();
    }

    /**
     * 题目已确保 timeSeriestimeSeries 为非递减排序，按照顺序进行遍历处理即可。
     * <p>
     * 我们使用 ansans 统计答案，使用 lastlast 记录上一次攻击的结束点，
     * 对于任意的 timeSeries[i]timeSeries[i] 而言，
     * 假设其发起点为 s = timeSeries[i]s=timeSeries[i]，
     * 结束点为 e = s + duration - 1e=s+duration−1，
     * 针对 lastlast 和 ss 进行分情况讨论即可：
     * last<s ：两次攻击不重合，则有 ans += duration; last = e;ans+=duration;last=e;
     * last>=s ：两次攻击重合，则有 ans += e - last; last = eans+=e−last;last=e
     * <p>
     * 注意：last 作为上次的结束点，在处理 timeSeries[i]时，
     * lastlast 是一个「已被统计」的存在，因此我们需要将其初始化为 -1（使用一个比 00 小的数值作为哨兵），
     * 以确保当 timeSeries[0] = 0 时，第 0 秒能够被计数
     */
    public static int findPoisonedDurationPlus(int[] timeSeries, int duration) {
        int answer = 0;
        //上次结束位置
        int last = -1;
        for (int start : timeSeries) {
            //结束位置
            int end = start + duration - 1;
            //如果last >= start则相当与我超过你start了，我得少加我start位置到（start+duration-1）位置的距离，
            // 不然如果直接answer+end会多加了一次duration-1
            //开始answer = last
            answer += last < start ? duration : end - last;
            last = end;
        }
        return answer;
    }

}
